ποΈGitΠ―ΡΠ°ποΈ
Node / meshtastic / Meshtastic-Android / files / specs / 20260507-161758-node-list-layout / quickstart.md
specs/20260507-161758-node-list-layout/quickstart.md bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 3.54 KB
Quickstart β Node List Layout
Purpose
This guide helps a Meshtastic-Android contributor bootstrap, navigate, test, and debug the Node List Layout feature.
Prerequisites
β’ JDK 21
β’ Android SDK installed and T383838ANDROID_HOME available to Gradle
β’ Git submodule initialized for T383838core/proto
β’ A working T383838local.properties file (copy from T383838secrets.defaults.properties if needed)
Workspace Bootstrap
T282828
git submodule update --init
Tff7b72[ -f local.properties Tff7b72] Tff7b72|| cp secrets.defaults.properties local.properties
Feature Access Path
Once implemented, the feature is accessible at:
β’ Settings UI: Settings > App Settings > Node Layout
β’ Node List: The Nodes tab renders rows based on the selected density
No new navigation routes or deep links are required.
Key Files
βββββββββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββ
β File β Purpose β
βββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββ€
β T383838feature/node/src/commonMain/.../model/NodeListβ¦ β T383838COMPLETE / T383838COMPACT enum β
β T383838feature/node/src/commonMain/.../component/Nodeβ¦ β Complete row composable (existing, refactored) β
β T383838feature/node/src/commonMain/.../component/Nodeβ¦ β Compact row composable (new) β
β T383838feature/node/src/commonMain/.../component/Nodeβ¦ β Help bottom sheet (new) β
β T383838feature/node/src/commonMain/.../list/NodeListSβ¦ β Density-aware list delegation β
β T383838feature/node/src/commonMain/.../list/NodeListVβ¦ β Exposes density + toggle state β
β T383838feature/node/src/commonMain/.../list/NodeFilteβ¦ β Layout preference integration β
β T383838core/prefs/src/commonMain/.../ui/UiPrefsImpl.kt β DataStore preference keys β
β T383838feature/settings/src/commonMain/.../NodeLayoutβ¦ β Settings section UI (new) β
β T383838core/resources/src/commonMain/composeResourcesβ¦ β Toggle labels, help text β
βββββββββββββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββ
Test Commands
Run feature module tests (KMP)
T282828
./gradlew :feature:node:allTests
./gradlew :feature:settings:allTests
Run core prefs tests
T282828
./gradlew :core:prefs:allTests
Full verification
T282828
./gradlew spotlessApply detekt assembleDebug Tffa657test allTests
Compile-only check (fast)
T282828
./gradlew :feature:node:compileKotlinJvm :feature:settings:compileKotlinJvm
Development Workflow
1. Start with preferences β add DataStore keys in T383838UiPrefsImpl.kt and verify defaults with a unit test.
2. Build the compact composable β create T383838NodeItemCompact.kt with hardcoded toggles first, then wire to DataStore.
3. Wire the list β modify T383838NodeListScreen.kt to switch between T383838NodeItem and T383838NodeItemCompact.
4. Build settings UI β create T383838NodeLayoutSettings.kt with the picker, toggles, and live preview.
5. Add the help sheet β create T383838NodeListHelp.kt with signal strength documentation.
6. Test β run T383838allTests for both T383838feature:node and T383838feature:settings.
Debugging Tips
β’ Toggle not persisting: Check that the DataStore key string matches T383838NodeListLayoutPreferences enum value exactly.
β’ Chip size wrong: Verify T383838lineCount derivation β it counts toggle state, not data presence.
β’ Live preview empty: The preview requires at least one node in the Room database. Connect to a radio or use test fixtures.
β’ LazyColumn jank: Ensure stable T383838key parameters are set on T383838LazyColumn items. Profile with Layout Inspector if needed.
Logging
This feature does not require custom logging beyond standard Compose recomposition debugging. Use Android Studio Layout Inspector to diagnose rendering issues.
Served by rngit 1.5.0 - Generated in 0.04s